package taller.businessLayer;

import java.rmi.RemoteException;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jms.JMSException;
import javax.naming.NamingException;

import taller.dataLayer.managers.AdministradorCotizaciones;
import taller.dataLayer.managers.AdministradorFacturas;
import taller.dataLayer.managers.AdministradorParametros;
import taller.dataLayer.managers.AdministradorRodamientos;
import taller.dataLayer.managers.AdministradorSolicitudesCompra;
import taller.dataLayer.managers.AdministradorSolicitudesCotizacion;
import taller.dataLayer.vo.CotizacionVO;
import taller.dataLayer.vo.FacturaVO;
import taller.dataLayer.vo.ItemCotizacionVO;
import taller.dataLayer.vo.RodamientoVO;
import taller.dataLayer.vo.SolicitudCompraVO;
import taller.dataLayer.vo.SolicitudCotizacionVO;
import taller.excepcion.ParserException;
import taller.util.Constantes;

@Stateless
public class BusinessFacadeBean implements BusinessFacade {
	@EJB(beanName="AdministradorCotizacionesBean")
	private AdministradorCotizaciones adminCotizaciones;
	@EJB(beanName="AdministradorFacturasBean")
	private AdministradorFacturas adminFacturas;
	@EJB(beanName="AdministradorRodamientosBean")
	private AdministradorRodamientos adminRodamientos;
	@EJB(beanName="AdministradorSolicitudesCompraBean")
	private AdministradorSolicitudesCompra adminSolicitudesCompra;
	@EJB(beanName="AdministradorSolicitudesCotizacionBean")
	private AdministradorSolicitudesCotizacion adminSolicitudesCotizacion;
	@EJB(beanName="AdministradorParametrosBean")
	private AdministradorParametros adminParam;
	
    public BusinessFacadeBean() {
    }

    public RodamientoVO buscarRodamiento(RodamientoVO rodamiento){
    	return adminRodamientos.buscar(rodamiento);
    }
    
	public CotizacionVO generarSolicitudYCotizar(SolicitudCotizacionVO solicitudCotizacion) {
		try {
			return adminSolicitudesCotizacion.guardarNuevaSolicitudYCotizar(solicitudCotizacion);
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (ParserException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public ItemCotizacionVO buscarUltimaCotizacion(RodamientoVO rodamiento) {
		return adminCotizaciones.buscarUltimaCotizacionParaRodamiento(rodamiento);
	}
	
	public SolicitudCompraVO generarSolicitudCompra(SolicitudCompraVO solicitudCompra) {
		try {
			adminSolicitudesCompra.guardarNuevaSolicitudYEnviar(solicitudCompra);
			return solicitudCompra;
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (ParserException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public void guardarFactura(FacturaVO factura) {
		adminFacturas.guardar(factura);
	}
	
	public void guardarRodamiento(RodamientoVO nuevoRodamiento) {
		adminRodamientos.guardar(nuevoRodamiento);
	}
	
	public List<RodamientoVO> obtenerListaRodamientos() {
		return adminRodamientos.buscarTodos();
	}
	
	public List<RodamientoVO> obtenerListaRodamientos(int desdeRegistro, int cantidad) {
		return adminRodamientos.buscarRodamientos(desdeRegistro, cantidad);
	}
	
	public int getCantidadRodamientos() {
		return adminRodamientos.getCantidadRodamientos();
	}

	public void guardarOficVtaAsignada(int oficinaVta) {
		adminParam.guardarParametro(Constantes.OFIC_VTA_ASIGNADA, String.valueOf(oficinaVta));
	}
}
